import React, { Component } from 'react';
import { Select, Button, Form, Input, DatePicker, Checkbox, Modal } from 'antd';
import { ExclamationCircleFilled } from '@ant-design/icons';
import GoBack from '@/components/TheGoBack'
import Goods from './components/Goods'
import dayjs from 'dayjs'
import moment from 'moment'
import { apiSeckillActivityDetail, apiSeckillActivityAdd, apiSeckillActivityEdit, apiSeckillActivitySkuFloorPriceVerify } from '@/request/marketingTool'
const { RangePicker } = DatePicker;
const { confirm } = Modal;
export default class KillAdd extends Component {
    constructor() {
        super()
        this.GoodsRef = React.createRef()
        this.formRef = React.createRef()
        this.state = {
            mode: '',
            activityId: '',
            activityType: "",
            disabledKeys: []
        }
    }
    componentDidMount() {
        this.setState({
            activityId: this.props.match.params.activityId,
            activityType: this.props.match.params.activityType,
            mode: this.props.match.params.mode
        }, () => {
            if (this.state.activityId !== 'null') {
                this.getDetail()
            }
        })

    }
    getDetail() {
        apiSeckillActivityDetail({ activityId: this.state.activityId, activityType: this.state.activityType }).then(res => {
            if (res.code === 0) {
                const types = []
                !res.data.enabledDecrement && types.push('enabledDecrement')
                !res.data.enabledDeliver && types.push('enabledDeliver')
                !res.data.couponEnabled && types.push('couponEnabled')
                console.log(types, 'types');
                const disabledKeys = []
                const goods = res.data.goodList.map(item => {
                    disabledKeys.push(item.goodsId)
                    let curLowPrice = item.skuList[0].skuCurrentPrice, curLowIndex = 0
                    const obj = {
                        killSort: item.sort,
                        goodsId: item.goodsId,
                        goodsName: item.goodsName,
                        skuInfoVos: item.skuList.map((sku, index) => {
                            // if (sku.skuCurrentPrice <= curLowPrice) {
                            //     curLowIndex = index
                            //     curLowPrice = sku.skuCurrentPrice
                            // }
                            return {
                                "materialId": sku.materialId,//物料编码
                                "goodsSkuId": sku.skuId,//skuId
                                "isJoin": 0,
                                skuAttributes: sku.skuAttributes || [],
                                skuStock: sku.skuStock,
                                "a_stock": sku.activityStock,//活动库存
                                skuCurrentPrice: sku.skuCurrentPrice,
                                "a_price": sku.activityGoodsSkuPrice ? (sku.activityGoodsSkuPrice / 100).toFixed(2) : 0,//活动价格
                                'isLimit': sku.quota === -1 ? 0 : 1,
                                "quota_count": sku.quota !== -1 ? sku.quota : this.state.mode !== 'view' ? null : -1,
                                "virtualCount": sku.virtualNum,//虚拟抢购件数
                                goodsBuySum: sku.goodsBuySum,
                                goodsSurplusSum: sku.goodsSurplusSum,
                                "activityStock_copy": sku.activityStock
                            }
                        })
                    }
                    // obj.skuInfoVos[curLowIndex].isLow = true
                    return obj
                })
                this.setState({
                    disabledKeys
                }, () => {
                    this.GoodsRef.current.setState({
                        dataSource: goods,
                    }, () => {
                        if (this.state.mode === 'view') {
                            this.formRef.current.setFieldsValue({
                                activityType: res.data.activityType,
                                activityName: res.data.activityName,
                                activityTime: res.data.warmingTime + '-' + res.data.endTime,
                                startTime: res.data.startTime,
                                types,
                                goods: goods
                            })
                        } else {
                            this.formRef.current.setFieldsValue({
                                activityType: res.data.activityType,
                                activityName: res.data.activityName,
                                activityTime: [moment(res.data.warmingTime), moment(res.data.endTime)],
                                startTime: moment(res.data.startTime),
                                types,
                                goods: goods
                            })
                        }

                    })
                })
            }
        }).catch(err => {
        })
    }
    onFinish() {
        let ActivityEdit = async (params) => {
            await apiSeckillActivityEdit({ ...params }).then(res => {
                if (res.code === 0) {
                    this.props.history.goBack(-1)
                }
            })
        }
        if (this.state.mode === 'add') {
            const values = this.formRef.current.getFieldsValue()
            const params = {
                "activityType": values.activityType,//活动类型
                "activityName": values.activityName,//活动名称
                "warmingTime": values.activityTime ? dayjs(values.activityTime[0]).format('YYYY-MM-DD HH:mm') : '',//秒杀开始时间
                "endTime": values.activityTime ? dayjs(values.activityTime[1]).format('YYYY-MM-DD HH:mm') : '',//结束时间
                "startTime": values.startTime ? dayjs(values.startTime).format('YYYY-MM-DD HH:mm') : '',//预热开始时间
                "enabledDecrement": values.types.includes('enabledDecrement') ? 0 : 1,// 是否满减 0 可以使用 1 不能使用
                "enabledDeliver": values.types.includes('enabledDeliver') ? 0 : 1,//是否满赠 0 可以使用 1 不能使用
                "couponEnabled": values.types.includes('couponEnabled') ? 0 : 1,//是否能使用优惠券 0 可以使用 1 不能使用
                "goodList": values.goods.map(item => {
                    return {
                        "goodsId": item.goodsId,//商品id
                        "goodsName": item.goodsName,//商品名称
                        "sort": item.killSort,//排序
                        "skuList": item.skuInfoVos.map(sku => {
                            return {
                                "materialId": sku.materialId,//物料编码
                                "skuId": sku.goodsSkuId,//skuId
                                skuAttributes: sku.skuAttributes,
                                "skuEnabled": 1,//是否参与活动 0不参加  1参加
                                "activityStock": sku.a_stock,//活动库存
                                "activityGoodsSkuPrice": sku.a_price ? sku.a_price * 100 : 0,//活动价格
                                "quota": sku.hasOwnProperty('isLimit') && sku.isLimit ? sku.quota_count : -1,//-1不限购 限购
                                "virtualNum": sku.virtualCount,//虚拟抢购件数
                                "skuStock": sku.skuStock,//库存
                                "skuCurrentPrice": sku.skuCurrentPrice ? sku.skuCurrentPrice : 0,//日常价格
                            }
                        })
                    }
                })
            }

            apiSeckillActivitySkuFloorPriceVerify(params).then(res => {
                if (res.code === 0 && res.data && Array.isArray(res.data) && res.data.length > 0) {
                    confirm({
                        title: '提示',
                        width: 800,
                        icon: <ExclamationCircleFilled />,
                        okText: '继续提交',
                        cancelText: "返回",
                        content: <div>
                            {res.data.map(item => <p>{item.tip}</p>)}
                        </div>,
                        onOk() {
                            return ActivityAdd({ ...params, floorPrice: true })
                        },
                        onCancel() { },
                    });
                } else {
                    ActivityAdd({ ...params })
                }
            })
            let ActivityAdd = async (params) => {
                await apiSeckillActivityAdd({ ...params }).then(res => {
                    if (res.code === 0) {
                        this.props.history.goBack(-1)
                    }
                })
            }

        } else if (this.state.mode === 'edit') {
            const values = this.formRef.current.getFieldsValue()
            const params = {
                "activityId": this.state.activityId,
                "activityType": values.activityType,//活动类型
                "activityName": values.activityName,//活动名称
                "warmingTime": values.activityTime ? dayjs(values.activityTime[0]).format('YYYY-MM-DD HH:mm') : '',//秒杀开始时间
                "endTime": values.activityTime ? dayjs(values.activityTime[1]).format('YYYY-MM-DD HH:mm') : '',//结束时间
                "startTime": values.startTime ? dayjs(values.startTime).format('YYYY-MM-DD HH:mm') : '',//预热开始时间
                "enabledDecrement": values.types.includes('enabledDecrement') ? 0 : 1,// 是否满减 0 可以使用 1 不能使用
                "enabledDeliver": values.types.includes('enabledDeliver') ? 0 : 1,//是否满赠 0 可以使用 1 不能使用
                "couponEnabled": values.types.includes('couponEnabled') ? 0 : 1,//是否能使用优惠券 0 可以使用 1 不能使用
                "goodList": values.goods.map(item => {
                    return {
                        "goodsId": item.goodsId,//商品id
                        "goodsName": item.goodsName,//商品名称
                        "sort": item.killSort,//排序
                        "skuList": item.skuInfoVos.map(sku => {
                            return {
                                // "goodsBuySum": sku.goodsBuySum,
                                'goodsSurplusSum': sku.goodsSurplusSum,
                                "materialId": sku.materialId,//物料编码
                                "skuId": sku.goodsSkuId,//skuId
                                skuAttributes: sku.skuAttributes,
                                "skuEnabled": 1,//是否参与活动 0不参加  1参加
                                "activityStock": sku.a_stock,//活动库存
                                "activityGoodsSkuPrice": sku.a_price ? sku.a_price * 100 : 0,//活动价格
                                "quota": sku.hasOwnProperty('isLimit') && sku.isLimit ? sku.quota_count : -1,//-1不限购 限购
                                "virtualNum": sku.virtualCount,//虚拟抢购件数
                                "skuStock": sku.skuStock,//库存
                                "skuCurrentPrice": sku.skuCurrentPrice ? sku.skuCurrentPrice : 0,//日常价格
                            }
                        })
                    }
                })
            }
            apiSeckillActivitySkuFloorPriceVerify(params).then(res => {
                if (res.code === 0 && res.data && Array.isArray(res.data) && res.data.length > 0) {
                    confirm({
                        title: '提示',
                        width: 800,
                        icon: <ExclamationCircleFilled />,
                        okText: '继续提交',
                        cancelText: "返回",
                        content: <div>
                            {res.data.map(item => <p>{item.tip}</p>)}
                        </div>,
                        onOk() {
                            return ActivityEdit({ ...params, floorPrice: true })
                        },
                        onCancel() { },
                    });
                } else {
                    ActivityEdit({ ...params })
                }
            })

        }
    }

    checkGoods(rules, value, callback) {
        value = this.GoodsRef.current.state.dataSource
        const formValue = this.formRef.current.getFieldsValue()

        let flag = true
        if (Array.isArray(value) && value.length > 0) {
            value.forEach(item => {
                // 校验排序
                // if (item.killSort === null || !item.hasOwnProperty('killSort')) {
                //     item.killSort_tip = '请填写排序！'
                //     flag = false
                // } else {
                //     item.killSort_tip = null
                // }
                item.killSort_tip = null
                item.skuInfoVos = item.skuInfoVos.map(sku => {
                    if (sku.isJoin) { //0 参加  1不参加
                        sku.a_stock_tip = null
                        sku.a_price_tip = null
                        sku.quota_count_tip = null
                        sku.virtualCount_tip = null
                        return sku
                    } else {
                        if (item.killSort === null || !item.hasOwnProperty('killSort')) {
                            item.killSort_tip = '请填写排序！'
                            flag = false
                        } else {
                            item.killSort_tip = null
                        }
                    }
                    // 校验活动库存
                    if (this.state.mode === 'add') {
                        if (sku.a_stock === null || !sku.hasOwnProperty('a_stock')) {
                            sku.a_stock_tip = '请填写活动库存！'
                            flag = false
                        } else if (sku.a_stock > sku.skuStock && sku.skuStock !== -1) {
                            sku.a_stock_tip = '秒杀库存必须小于等于实际库存值！'
                            flag = false
                        } else {
                            sku.a_stock_tip = null
                        }
                    } else if (this.state.mode === 'edit') {
                        if (sku.a_stock === null || !sku.hasOwnProperty('a_stock')) {
                            sku.a_stock_tip = '请填写活动库存！'
                            flag = false
                        } else if (sku.a_stock < sku.goodsBuySum) {
                            sku.a_stock_tip = '秒杀活动库存小于实际已售卖的数量！'
                            flag = false
                        } else if (sku.a_stock > (sku.activityStock_copy + sku.skuStock) && sku.skuStock !== -1) {
                            sku.a_stock_tip = '秒杀填写的库存增量差必须小于等于商品正价售卖的库存值！'
                            flag = false

                        } else {
                            sku.a_stock_tip = null
                        }

                    }
                    if (sku.hasOwnProperty('goodsSurplusSum') || sku.hasOwnProperty('goodsBuySum')) {
                        if (sku.a_stock < sku.goodsBuySum) {
                            sku.a_stock_tip = '秒杀活动库存小于实际已售卖的数量！'
                            flag = false
                        }
                    }
                    // 校验活动价
                    if (sku.a_price === null || !sku.hasOwnProperty('a_price')) {
                        sku.a_price_tip = '请填写活动价！'
                        flag = false
                    } else {
                        sku.a_price_tip = null
                    }
                    // 校验限购件数
                    if (sku.isLimit && (sku.quota_count === null || !sku.hasOwnProperty('quota_count'))) {
                        sku.quota_count_tip = '请填写限购件数！'
                        flag = false
                    } else {
                        sku.quota_count_tip = null
                    }
                    // 校验虚拟抢购件数
                    // if (sku.virtualCount === null || !sku.hasOwnProperty('virtualCount')) {
                    //     sku.virtualCount_tip = '请填写虚拟抢购件数！'
                    //     flag = false
                    // } else 
                    if (sku.virtualCount !== null && sku.virtualCount >= sku.a_stock && sku.a_stock > 0) {
                        sku.virtualCount_tip = '虚拟抢购件数必须小于实际活动库存值'
                        flag = false
                    } else {
                        sku.virtualCount_tip = null
                    }
                    return sku
                })
            })
        }
        if (Array.isArray(value) && value.length > 0) {
            if (value.length < (formValue.activityType === 'SECKILL_ACTIVITY'?1:3)) {
                callback('请至少选择3个商品!')
            } else {
                if (flag) {
                    callback()
                    this.GoodsRef.current.setState({
                        dataSource: value
                    }, () => {
                        this.formRef.current.setFieldsValue({ goods: value })
                    })
                }
                if (!flag) {
                    callback('请完善数据!')
                }
            }
        } else {
            callback('请添加活动商品!')
        }
    }
    checkTime(rules, value, callback) {
        const formValues = this.formRef.current.getFieldsValue()
        let { activityTime, startTime } = formValues
        const sTime = activityTime && dayjs(activityTime[0]).format('YYYY-MM-DD HH:mm').valueOf()
        const eTime = activityTime && dayjs(activityTime[1]).format('YYYY-MM-DD HH:mm').valueOf()
        startTime = startTime && dayjs(startTime).format('YYYY-MM-DD HH:mm').valueOf()
        if (rules.field === 'activityTime') {
            if (activityTime) {
                if (eTime <= dayjs().valueOf()) {
                    callback('请选择未来的时间范围！')
                } else {
                    callback()
                }

            } else {
                callback('请选择活动时间！')
            }
        } else if (rules.field === 'startTime') {
            if (startTime) {
                if (activityTime) {
                    if (startTime >= sTime && startTime < eTime) {
                        callback()
                    } else {
                        callback('秒杀开始时间必须在活动开始时间和结束时间范围内！')
                    }
                }
            } else {
                callback('请选择秒杀时间！')
            }
        }
    }
    getFieldsValue(key, isCheck) {
        const values = this.formRef.current.getFieldsValue()
        if (!values.activityTime) {
            isCheck && this.formRef.current.validateFields([key])
            return false
        }
        return values.activityTime
    }

    render() {
        const { mode, disabledKeys, activityId } = this.state
        return (
            <div className="p-layout-box">
                <GoBack history={this.props.history} title={mode === 'add' ? '创建活动' : mode === 'edit' ? '编辑活动' : '活动详情'} />
                <Form
                    style={{ marginTop: 20 }}
                    ref={this.formRef}
                    initialValues={{
                        types: ['enabledDeliver'],
                        activityType: 'SECKILL_HOMEPAGE'
                    }}
                    labelCol={{ span: 2 }}
                    wrapperCol={{ span: 22 }}
                    onFinish={(values) => this.onFinish(values)}
                    autoComplete="off"
                >
                    <Form.Item
                        label="活动类型"
                        name="activityType"
                        rules={[
                            {
                                required: mode !== 'view',
                                message: '请选择活动类型!',
                            },
                        ]}
                    >

                        {
                            mode === 'view' ? <Select bordered={false} disabled mode="multiple"
                                style={{ width: 300 }}
                                options={[{ value: 'SECKILL_HOMEPAGE', label: '首页秒杀' }, { value: 'SECKILL_ACTIVITY', label: '活动秒杀' }]}
                            /> : <Select
                                disabled={mode === 'edit'}
                                style={{ width: 300 }}
                                options={[{ value: 'SECKILL_HOMEPAGE', label: '首页秒杀' }, { value: 'SECKILL_ACTIVITY', label: '活动秒杀' }]}
                            />
                        }

                    </Form.Item>
                    <Form.Item
                        label="活动名称"
                        name="activityName"
                        rules={[
                            {
                                required: mode !== 'view',
                                message: '请输入活动名称!'
                            }
                        ]}
                    >
                        <Input style={{ width: 500 }} bordered={mode !== 'view'} readOnly={mode === 'view'} maxLength={30} showCount />
                    </Form.Item>
                    <Form.Item
                        label="活动时间"
                        name="activityTime"
                        rules={[
                            {
                                required: mode !== 'view',
                                validator: this.checkTime.bind(this)
                            }
                        ]}

                    >
                        {
                            mode === 'view' ?
                                <Input bordered={false} readOnly></Input>
                                :
                                <RangePicker

                                    onChange={this.onChange}
                                    format="YYYY-MM-DD HH:mm" style={{
                                        width: 500,
                                    }} showTime />
                        }

                    </Form.Item>
                    <Form.Item
                        noStyle
                        shouldUpdate={(prevValues, currentValues) => prevValues.activityTime !== currentValues.activityTime}
                    >
                        {
                            ({ getFieldValue }) =>
                                <Form.Item
                                    label="秒杀开始"
                                    name="startTime"
                                    rules={[
                                        {
                                            required: mode !== 'view',
                                            validator: this.checkTime.bind(this)
                                        }
                                    ]}
                                >
                                    {
                                        mode === 'view' ?
                                            <Input bordered={false} readOnly></Input>
                                            :
                                            <DatePicker format="YYYY-MM-DD HH:mm" showTime showNow={false}
                                            />
                                    }

                                </Form.Item>
                        }
                    </Form.Item>
                    <Form.Item
                        label="优惠叠加"
                        name="types"
                        rules={[
                            {
                                required: mode !== 'view',
                                message: '请选择优惠叠加!'
                            }
                        ]}
                    >
                        {
                            mode === 'view' ?
                                <Select bordered={false} disabled mode="multiple"
                                    style={{ width: 300 }}
                                    options={[{ value: 'enabledDecrement', label: '全平台满减' }, { value: 'enabledDeliver', label: '全平台满赠' }, { value: 'couponEnabled', label: '优惠券' }]}
                                /> :
                                <Checkbox.Group
                                    style={{
                                        width: '100%',
                                    }}
                                >
                                    <Checkbox value="enabledDecrement">全平台满减</Checkbox>
                                    <Checkbox value="enabledDeliver" disabled >全平台满赠</Checkbox>
                                    <Checkbox value="couponEnabled" disabled>优惠券</Checkbox>
                                </Checkbox.Group>
                        }

                    </Form.Item>
                    <Form.Item
                        label="商品"
                        name="goods"
                        rules={[
                            {
                                required: mode !== 'view',
                                validator: this.checkGoods.bind(this)

                            }
                        ]}
                    >
                        <Goods ref={this.GoodsRef} mode={mode} activityId={activityId} disabledKeys={disabledKeys} getFieldsValue={(key, isCheck) => this.getFieldsValue(key, isCheck)}></Goods>
                    </Form.Item>
                    <Form.Item
                        wrapperCol={{
                            offset: 8,
                            span: 16,
                        }}
                    >
                        <Button type="default" onClick={() => this.props.history.go(-1)} style={{ 'marginRight': 20 }}>
                            {mode === 'view' ? '返回' : '取消'}
                        </Button>
                        {
                            mode !== 'view' &&
                            <Button type="primary" htmlType="submit">
                                确定
                            </Button>
                        }

                    </Form.Item>
                </Form>
            </div>
        );
    }
}
